package com.zhan.rkforum.dao;


import com.zhan.rkforum.bean.Message;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Repository;

import java.util.List;

;

@Mapper
@Repository
public interface MessageMapper {


    /**
     * 查询会话列表
     *
     * @param userId 用户id
     * @param offset 起始坐标
     * @param limit  条数
     * @return {@link List<Message>}
     */
    List<Message> selectConversationByPage(@Param("userId") int userId, @Param("offset") int offset, @Param("limit") int limit);


    /**
     * 分页查询会话中的详细
     *
     * @param conversationId 会话id
     * @param offset         起始坐标
     * @param limit          条数
     * @return {@link List<Message>}
     */
    List<Message> selectLettersByPage(@Param("conversationId") String conversationId, @Param("offset") int offset, @Param("limit") int limit);

    /**
     * 查询会话总数
     *
     * @param userId 用户id
     * @return int
     */
    int selectConversationCount(@Param("userId") int userId);


    /**
     * 查询未读消息数
     *
     * @param userId         用户id
     * @param conversationId 会话id
     * @return int
     */
    int selectUnreadMessageCount(@Param("userId") int userId, @Nullable @Param("conversationId") String conversationId);


    /**
     * 选择会话中消息数
     *
     * @param conversationId 会话id
     * @return int
     */
    int selectLettersCount(@Param("conversationId") String conversationId);


    /**
     * 批量更新消息的状态
     *
     * @param ids    需要更新的消息的id集合
     * @param status 状态
     */
    void updateMessagesStatus(List<Integer> ids,@Param("status") int status);


    /**
     * 添加消息
     *
     * @param message 消息
     */
    void addMessage(Message message);

    /**
     * 通过id和主题查询通知
     *
     * @param userId 用户id
     * @param topic  主题
     * @return {@link Message}
     */
    Message findNoticeById(@Param("userId") int userId, @Param("topic") String topic);

    /**
     * 查询某用户主题通知的总数
     *
     * @param userId 用户id
     * @param topic  主题
     * @return int
     */
    int findTopicNoticeCount(@Param("userId") int userId, @Param("topic") String topic);

    /**
     * 查询某用户未阅读数量
     *
     * @param userId 用户id
     * @param topic  主题
     * @return int
     */
    int unReadTopicNoticeCount(@Param("userId") int userId, @Param("topic") String topic);


    /**
     *查询主题消息列表
     *
     * @param userId 用户id
     * @param topic 主题
     * @param offset 开始坐标
     * @param limit 条数
     * @return {@link List<Message>}
     */
    List<Message> findMessageList(@Param("userId") int userId,@Param("topic") String topic,@Param("offset") int offset,@Param("limit") int limit);



}
